www.gusucode.com > linux 下网络编程服务器源码程序 > linux 下网络编程服务器源码程序/service.cpp
//#include <netinet/in.h> //#include <sys/types.h> //#include <sys/socket.h> //#include <fcntl.h> //#include <iostream> //#include <signal.h> //#include <sys/epoll.h> // //#define MAXFDS 256 //#define EVENTS 100 //#define PORT 8888 // //int epfd; //bool setNonBlock(int fd) //{ // int flags = fcntl(fd, F_GETFL, 0); // // flags |= O_NONBLOCK; // if(-1 == fcntl(fd, F_SETFL, flags)) // return false; // // return true; //} // //int main(int argc, char* argv[], char* evp[]) //{ // int fd, nfds, confd; // int on = 1; // char* buffer[512]; // struct sockaddr_in saddr, caddr; // struct epoll_event ev, events[EVENTS]; // // if(-1 == socket(AF_INET, SOCKSTREAM), 0) // { // std::cout << "创建套接字出错啦" << std::endl; // return -1; // } // // // struct sigaction sig; // sigemptyset(&sig.sa_mask); // sig_handler = SIG_IGN; // sigaction(SIGPIPE, &sig, NULL); // // epfd = epoll_create(MAXFDS); // // setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); // // memset(&saddr, 0, sizeof(saddr)); // saddr.sin_family = AF_INET; // saddr.sin_port = htons((short)(PORT)); // saddr.sin_addr.s_addr = INADDR_ANY; // if(-1 == bind(fd, (struct sockaddr*)&saddr, sizeof(saddr))) // { // std::cout << "套接字不能绑定到服务器上" << std::endl; // return -1; // } // // if(-1 == listen(fd, 32)) // { // std::cout << "监听套接字的时候出错了" << std::endl; // return -1; // } // // ev.data.fd = fd; // ev.events = EPOLLIN; // epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev); // // while(true) // { // nfds = epoll_wait(epfd, &events, MAXFDS, 0); // // for(int i=0; i < nfds; ++ i) // { // if(fd == events[i].data.fd) // { // memset(&caddr, sizeof(caddr)); // cfd = accept(fd, (struct sockaddr*)&caddr, &sizeof(caddr)); // if(-1 == cfd) // { // std::cout << "服务器接收套接字的时候出问题了" << std::endl; // break; // } // // setNonBlock(cfd); // // ev.data.fd = cfd; // ev.events = EPOLLIN; // epoll_ctl(epfd, EPOLL_CTL_ADD, cfd, &ev); // } // else if(events[i].data.fd & EPOLLIN) // { // bzero(&buffer, sizeof(buffer)); // std::cout << "服务器端要读取客户端发过来的消息" << std::endl; // ret = recv(events[i].data.fd, buffer, sizeof(buffer), 0); // if(ret < 0) // { // std::cout << "服务器收到的消息出错了" << endl; // return -1; // } // std::cout << "接收到的消息为:" << (char*) buffer << std::endl; // ev.data.fd = events[i].data.fd; // ev.events = EPOLLOUT; // epoll_ctl(epfd, EPOLL_CTL_MOD, events[i].data.fd, &ev); // } // else if(events[i].data.fd & EPOLLOUT) // { // bzero(&buffer, sizeof(buffer)); // bcopy("The Author@: magicminglee@Hotmail.com", buffer, sizeof("The Author@: magicminglee@Hotmail.com")); // ret = send(events[i].data.fd, buffer, strlen(buffer)); // if(ret < 0) // { // std::cout << "服务器发送消息给客户端的时候出错啦" << std::endl; // return -1; // } // ev.data.fd = events[i].data.fd; // epoll_ctl(epfd, EPOLL_CTL_DEL, ev.data.fd, &ev); // } // } // } // if(fd > 0) // { // shutdown(fd, SHUT_RDWR); // close(fd); // } //}